CREATE TABLE [dbo].[tb_CabeceraDeLiquidacion]
(
[IdCabeceraDeLiquidacion] [int] NOT NULL IDENTITY(1, 1),
[FechaDeCreacion] [datetime] NULL,
[Descripcion] [varchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[Mes] [int] NOT NULL,
[Anio] [int] NOT NULL,
[Desde] [datetime] NULL,
[Hasta] [datetime] NULL,
[TipoDeProceso] [int] NULL,
[Estado] [int] NULL,
[TipoDeLiquidacion] [int] NOT NULL,
[RegimenLaboral] [int] NOT NULL,
[DesdeSuplente] [datetime] NULL,
[HastaSuplente] [datetime] NULL
) ON [PRIMARY]
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE TRIGGER [dbo].[AsignarValoresPorDefault] ON [dbo].[tb_CabeceraDeLiquidacion] 
FOR INSERT
AS
SET NOCOUNT ON
DECLARE @MesesSRTitulares INT
DECLARE @MesesSRSuplentes INT
DECLARE @MesLiquidacion INT
DECLARE @AnioLiquidacion INT
DECLARE @MesDefinitivoTitulares INT 
DECLARE @AnioDefinitivoTitulares INT 
DECLARE @MesDefinitivoSuplentes INT 
DECLARE @AnioDefinitivoSuplentes INT 

-- Sacar Mes y Año Liquidacion
SELECT @MesLiquidacion = I.Mes FROM INSERTED AS I 
SELECT @AnioLiquidacion = I.Anio FROM INSERTED AS I 

-- Buscar en Paramentros para meses Sumar y Restar
SELECT @MesesSRTitulares = CONVERT(DECIMAL(18,4), valor1) FROM tb_Parametros WHERE parametro = 'LiqPeriodoTitulares'
SELECT @MesesSRSuplentes = CONVERT(DECIMAL(18,4), valor1) FROM tb_Parametros WHERE parametro = 'LiqPeriodoSuplentes'

-- Sacar Mes y Año Definitivo para Titulares 
SELECT @MesDefinitivoTitulares = @MesLiquidacion + @MesesSRTitulares
SELECT @AnioDefinitivoTitulares = @AnioLiquidacion

IF @MesDefinitivoTitulares <= 0 
  BEGIN
     SELECT @MesDefinitivoTitulares = 12 - @MesDefinitivoTitulares
     SELECT @AnioDefinitivoTitulares = @AnioLiquidacion - 1
  END
ELSE
  BEGIN
         IF @MesDefinitivoTitulares > 12 
             BEGIN
	   SELECT @MesDefinitivoTitulares = @MesDefinitivoTitulares - 12
	   SELECT @AnioDefinitivoTitulares = @AnioLiquidacion + 1
	END
  END
   
-- Sacar Mes y Año Definitivo para Suplentes
SELECT @MesDefinitivoSuplentes = @MesLiquidacion + @MesesSRSuplentes
SELECT @AnioDefinitivoSuplentes = @AnioLiquidacion 

IF @MesDefinitivoSuplentes <= 0 
  BEGIN
     SELECT @MesDefinitivoSuplentes = 12 - @MesDefinitivoSuplentes
     SELECT @AnioDefinitivoSuplentes = @AnioLiquidacion - 1
  END
ELSE
  BEGIN
         IF @MesDefinitivoSuplentes > 12 
             BEGIN
	   SELECT @MesDefinitivoSuplentes = @MesDefinitivoSuplentes - 12
	   SELECT @AnioDefinitivoSuplentes = @AnioLiquidacion + 1
	END
  END

-- Asignar Estado y demas datos
UPDATE Cabecera SET Estado = ISNULL(I.Estado,1), 
			FechaDeCreacion=CONVERT(VARCHAR(10),GETDATE(),103),
			Desde = '01/'+CONVERT(VARCHAR(2), @MesDefinitivoTitulares)+'/'+CONVERT(VARCHAR(4), @AnioDefinitivoTitulares),
			Hasta = CONVERT(VARCHAR(2), (SELECT Dias FROM Tb_Meses WHERE IdMes = @MesDefinitivoTitulares))+'/'+CONVERT(VARCHAR(2), @MesDefinitivoTitulares)+'/'+CONVERT(VARCHAR(4), @AnioDefinitivoTitulares),
			DesdeSuplente =  '01/'+CONVERT(VARCHAR(2), @MesDefinitivoSuplentes)+'/'+CONVERT(VARCHAR(4), @AnioDefinitivoSuplentes),
			HastaSuplente = CONVERT(VARCHAR(2), (SELECT Dias FROM Tb_Meses WHERE IdMes = @MesDefinitivoSuplentes))+'/'+CONVERT(VARCHAR(2), @MesDefinitivoSuplentes)+'/'+CONVERT(VARCHAR(4), @AnioDefinitivoSuplentes)
		     FROM INSERTED I INNER JOIN Tb_CabeceraDeLiquidacion AS Cabecera ON Cabecera.IdCabeceraDeLiquidacion = I.IdCabeceraDeLiquidacion








GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE TRIGGER [dbo].[tiuCabeceraDeLiquidacion] ON [dbo].[tb_CabeceraDeLiquidacion] 
FOR INSERT, UPDATE
AS
SET NOCOUNT ON
DECLARE @Cant INT

SELECT @Cant=(SELECT COUNT(*) FROM tb_CabeceraDeLiquidacion WHERE Estado =2 OR Estado=3)
IF @Cant>1
BEGIN
	RAISERROR('No se puede dar de Alta/Actualizar. Ya existe una Liquidación Pendiente o en Ejecución...', 16,1)
	ROLLBACK
END

--IF EXISTS(SELECT * FROM INSERTED WHERE MONTH(Desde) <> MONTH(Hasta))
--  BEGIN
--	RAISERROR('Fecha Desde y Hasta deben estar dentro del mismo mes...', 16,1)
--	ROLLBACK
-- END 

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE TRIGGER [dbo].[tuTipoDeLiquidacion] ON [dbo].[tb_CabeceraDeLiquidacion] 
FOR UPDATE
AS
SET NOCOUNT ON
-- Si se actualizó el tipo de liquidación
IF EXISTS(SELECT * FROM inserted I INNER JOIN deleted D ON D.IdCabeceraDeLiquidacion = I.IdCabeceraDeLiquidacion
	AND D.TipoDeLiquidacion <> I.TipoDeLiquidacion)
	UPDATE L SET Tipo = I.TipoDeLiquidacion FROM tb_Liquidaciones L 
		INNER JOIN inserted I ON L.IdCabeceraLiquidacion = I.IdCabeceraDeLiquidacion


GO
ALTER TABLE [dbo].[tb_CabeceraDeLiquidacion] ADD CONSTRAINT [PK_tb_CabeceraDeLiquidacion] PRIMARY KEY CLUSTERED  ([IdCabeceraDeLiquidacion]) ON [PRIMARY]
GO
ALTER TABLE [dbo].[tb_CabeceraDeLiquidacion] WITH NOCHECK ADD CONSTRAINT [FK_tb_CabeceraDeLiquidacion_tb_EstadosDeLiquidacion] FOREIGN KEY ([Estado]) REFERENCES [dbo].[tb_EstadosDeLiquidacion] ([IdEstadoDeLiquidacion])
GO
ALTER TABLE [dbo].[tb_CabeceraDeLiquidacion] WITH NOCHECK ADD CONSTRAINT [FK_tb_CabeceraDeLiquidacion_tb_Meses] FOREIGN KEY ([Mes]) REFERENCES [dbo].[tb_Meses] ([idMes])
GO
ALTER TABLE [dbo].[tb_CabeceraDeLiquidacion] WITH NOCHECK ADD CONSTRAINT [FK_tb_CabeceraDeLiquidacion_tb_RegimenLaboral] FOREIGN KEY ([RegimenLaboral]) REFERENCES [dbo].[tb_RegimenLaboral] ([idRegimenLaboral])
GO
ALTER TABLE [dbo].[tb_CabeceraDeLiquidacion] WITH NOCHECK ADD CONSTRAINT [FK_tb_CabeceraDeLiquidacion_tb_TiposDeLiquidacion] FOREIGN KEY ([TipoDeLiquidacion]) REFERENCES [dbo].[tb_TiposDeLiquidacion] ([IdTipoDeLiquidacion])
GO
GRANT SELECT ON  [dbo].[tb_CabeceraDeLiquidacion] TO [Subsidios]
GRANT SELECT ON  [dbo].[tb_CabeceraDeLiquidacion] TO [SubsidiosConsulta]
GO
EXEC sp_addextendedproperty N'MS_Description', N'Ver si se tiene en Cuenta OJO', 'USER', N'dbo', 'TABLE', N'tb_CabeceraDeLiquidacion', 'COLUMN', N'TipoDeProceso'
GO
